﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kakaroto.Models;
using System.Web.ModelBinding;

namespace Kakaroto.Pedidos
{
    public partial class FinalizaPedido : System.Web.UI.Page
    {
        static string prevPage = String.Empty;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                prevPage = Request.UrlReferrer.ToString();
            }

            using (PedidoActions actPedido = new PedidoActions())
            {
                lblMesa.Text = actPedido.GetMesaPedido();
                lblTotal.Text = String.Format("{0:c}", actPedido.GetTotal());
            }
        }

        public void UpdateItem()
        {
            KakarotoEntities _db = new KakarotoEntities();
            PedidoActions actPedidos = new PedidoActions();
            string IdPedido = actPedidos.GetIdPedido();

            using (_db)
            {
                bool eh_novo = false;
                
                var item = _db.Pedido.Find(IdPedido);
                if (item == null)
                {
                    item = NovoPedido(IdPedido);
                    eh_novo = true;
                }
                TryUpdateModel(item);
                item.Total = (double?)actPedidos.GetTotal();

                if (ModelState.IsValid)
                {
                    List<ItemPedido> itensPedido = GetNovosItensPedido();
                    foreach (var ip in itensPedido)
                        item.ItemPedido.Add(new ItemPedido
                        {
                            Id = Guid.NewGuid().ToString(),
                            Id_Ped = IdPedido,
                            Id_Prod = ip.Id_Prod,
                            Preco = ip.Preco,
                            Qtdd = ip.Qtdd,
                            Observacao = ip.Observacao,
                            Hora = DateTime.Now
                        });
                   
                    if (eh_novo)
                    {
                        _db.Pedido.Add(item);
                    }
                    
                    _db.SaveChanges();
                    actPedidos.SetAllNull();
                    Response.Redirect("./Default.aspx");
                }
            }
        }

        public Pedido GetItem()
        {
            KakarotoEntities _db = new KakarotoEntities();
            PedidoActions actPedidos = new PedidoActions();
            string IdPedido = actPedidos.GetIdPedido();

            using (_db)
            {
                var item = _db.Pedido.Find(IdPedido);
                if (item == null)
                {
                    return NovoPedido(IdPedido);
                }
                else return item;
            }
        }

        public List<ItemPedido> GetNovosItensPedido()
        {
            List<ItemPedido> itensPedido = HttpContext.Current.Session["ItensPedido"] as List<ItemPedido>;
            return itensPedido.Where(ip => ip.Pronto == null).ToList();
        }

        protected Pedido NovoPedido(string IdPedido)
        {
            return new Pedido
            {
                Id = IdPedido,
                Id_Mesa = Int32.Parse(HttpContext.Current.Session["IdMesa"].ToString()),
                Desconto = 0,
                Servico = 10,
                Entrada = DateTime.Now,
                Status_Pagamento = false
            };
        }

        protected void ItemCommand(object sender, FormViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Cancel", StringComparison.OrdinalIgnoreCase))
            {
                Response.Redirect(prevPage);
            }
        }
    }
}